﻿using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace GameTimeSystem
{
    public class GameTimeSystemFacade : Singleton<GameTimeSystemFacade>, IGameTimerManager
    {
        IGameTimerManager gameTimerManager = new GameTimerManager();

        public void Init()
        {
            gameTimerManager.Init();
        }


        //public IGameTimer RegisterTimer(float edgeTime, float timeScale, Action onTimeOut, Action OnPause = null)
        //{
        //    if (SpareTimers.Count > 0)
        //    {
        //        SpareTimers[0].EdgeTime = edgeTime;
        //        SpareTimers[0].TimeScale = timeScale;
        //        SpareTimers[0].OnTimeOut += onTimeOut;
        //        SpareTimers[0].OnPause += OnPause;

        //        Timers.Add(SpareTimers[0]);
        //        SpareTimers.RemoveAt(0);
        //    }
        //    else
        //    {
        //        GameTimer timer = new GameTimer();
        //        timer.SetData(edgeTime, onTimeOut, timeScale);
        //        timer.OnPause += OnPause;

        //        Timers.Add(timer);
        //    }


        //    return Timers[Timers.Count - 1];
        //}

        //public void BreakTimer(IGameTimer timer)
        //{
        //    timer.IsBreak = true;
        //}

        //private void Update()
        //{
        //    Timers.Sort((item1, item2) =>
        //    {
        //        if (item1.IsTimeOut && !item2.IsTimeOut)
        //        {
        //            return 1;
        //        }
        //        else if (!item1.IsTimeOut && item2.IsTimeOut)
        //        {
        //            return -1;
        //        }
        //        return 0;
        //    });

        //    for (int i = Timers.Count - 1; i >= 0; i--)
        //    {
        //        if (Timers[i].IsTimeOut)
        //        {
        //            SpareTimers.Add(Timers[i]);
        //            Timers.RemoveAt(i);
        //        }
        //    }

        //    for (int i = 0; i < Timers.Count; i++)
        //    {
        //        Timers[i].Polling(Time.deltaTime);
        //    }

        //}

        public GameTimer GetGameUpdateTimer(int priority,bool isStatic=false)
        {
            return gameTimerManager.GetGameUpdateTimer(priority, isStatic);
        }

        public void FixedUpdate(float deltaTime)
        {
            gameTimerManager.FixedUpdate(deltaTime);
        }

        public void Update(float deltaTime)
        {
            gameTimerManager.Update(deltaTime);
        }

        public void LateUpdate(float deltaTime)
        {
            gameTimerManager.LateUpdate(deltaTime);
        }

        public void SetSpeed(float speed, int targetSystem = -1)
        {
            throw new NotImplementedException();
        }
    }
}